// https://leetcode.cn/problems/is-unique-lcci/description/

// 算法思路总结：
// 1. 使用位图法检测字符唯一性
// 2. 利用整数的二进制位记录字符出现情况
// 3. 遍历字符串，检查对应位是否已设置
// 4. 如果已设置则返回false，否则设置对应位
// 5. 时间复杂度：O(n)，空间复杂度：O(1)

#include <iostream>
using namespace std;

#include <string>

class Solution 
{
public:
    bool isUnique(string astr) 
    {
        if (astr.size() > 26) return false;

        int bitMap = 0;
        for (char& ch : astr)
        {
            int count = ch - 'a';
            if ((1 << count) & bitMap)
                return false;
            bitMap |= 1 << count;
        }
        return true;
    }
};

int main()
{
    string s1 = "leetcode";
    string s2 = "abc";

    Solution sol;
    cout << sol.isUnique(s1) << endl;
    cout << sol.isUnique(s2) << endl;

    return 0;
}